/**
 * 日志工具类 - 根据环境变量控制日志输出级别
 * 开发环境：输出所有级别日志
 * 生产环境：只输出错误和警告日志
 */
class Logger {
    constructor() {
        // 从环境变量或localStorage获取环境设置
        this.isDevelopment = this._getEnvironment();
        this.logLevels = {
            ERROR: 0,
            WARN: 1,
            INFO: 2,
            DEBUG: 3
        };
        
        // 根据环境设置最小日志级别
        this.minLogLevel = this.isDevelopment ? this.logLevels.DEBUG : this.logLevels.WARN;
    }
    
    /**
     * 获取当前环境
     * @returns {boolean} 是否为开发环境
     */
    _getEnvironment() {
        // 优先检查全局环境变量
        if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV) {
            return process.env.NODE_ENV === 'development';
        }
        
        // 检查localStorage中的环境设置
        try {
            const env = localStorage.getItem('NODE_ENV') || 'development';
            return env === 'development';
        } catch (e) {
            // 默认为开发环境
            return true;
        }
    }
    
    /**
     * 输出错误日志
     * @param {string} message - 日志消息
     * @param {...any} args - 额外参数
     */
    error(message, ...args) {
        this._log(this.logLevels.ERROR, 'ERROR', message, ...args);
    }
    
    /**
     * 输出警告日志
     * @param {string} message - 日志消息
     * @param {...any} args - 额外参数
     */
    warn(message, ...args) {
        this._log(this.logLevels.WARN, 'WARN', message, ...args);
    }
    
    /**
     * 输出信息日志
     * @param {string} message - 日志消息
     * @param {...any} args - 额外参数
     */
    info(message, ...args) {
        this._log(this.logLevels.INFO, 'INFO', message, ...args);
    }
    
    /**
     * 输出调试日志
     * @param {string} message - 日志消息
     * @param {...any} args - 额外参数
     */
    debug(message, ...args) {
        this._log(this.logLevels.DEBUG, 'DEBUG', message, ...args);
    }
    
    /**
     * 核心日志输出方法
     * @private
     * @param {number} level - 日志级别
     * @param {string} levelName - 级别名称
     * @param {string} message - 日志消息
     * @param {...any} args - 额外参数
     */
    _log(level, levelName, message, ...args) {
        // 检查是否应该输出此级别的日志
        if (level > this.minLogLevel) {
            return;
        }
        
        // 格式化时间戳
        const timestamp = new Date().toISOString();
        
        // 根据级别选择控制台方法
        let consoleMethod;
        let prefixStyle = '';
        
        switch (level) {
            case this.logLevels.ERROR:
                consoleMethod = console.error;
                prefixStyle = 'color: #ff4757; font-weight: bold;';
                break;
            case this.logLevels.WARN:
                consoleMethod = console.warn;
                prefixStyle = 'color: #ffa502; font-weight: bold;';
                break;
            case this.logLevels.INFO:
                consoleMethod = console.info;
                prefixStyle = 'color: #3742fa; font-weight: bold;';
                break;
            case this.logLevels.DEBUG:
                consoleMethod = console.log;
                prefixStyle = 'color: #2ed573; font-weight: bold;';
                break;
            default:
                consoleMethod = console.log;
                prefixStyle = '';
        }
        
        // 输出日志
        if (this.isDevelopment) {
            // 开发环境：带颜色和详细信息的日志
            consoleMethod(
                `%c[${timestamp}] %c[${levelName}] %c[AI助手]`,
                'color: #747d8c;',
                prefixStyle,
                'color: #5f27cd;',
                message,
                ...args
            );
        } else {
            // 生产环境：简洁的日志
            consoleMethod(`[${timestamp}] [${levelName}] ${message}`, ...args);
        }
    }
    
    /**
     * 创建带上下文的日志器
     * @param {string} context - 上下文标识
     * @returns {Object} 带上下文的日志方法
     */
    createContextLogger(context) {
        const self = this;
        return {
            error: (message, ...args) => self.error(`[${context}] ${message}`, ...args),
            warn: (message, ...args) => self.warn(`[${context}] ${message}`, ...args),
            info: (message, ...args) => self.info(`[${context}] ${message}`, ...args),
            debug: (message, ...args) => self.debug(`[${context}] ${message}`, ...args)
        };
    }
}

// 创建全局日志实例
const logger = new Logger();

// 导出日志器和上下文创建方法
if (typeof module !== 'undefined' && module.exports) {
    module.exports = { logger, Logger };
} else {
    window.logger = logger;
    window.Logger = Logger;
}